package mSecretaria;

import java.sql.ResultSet;
import java.util.ArrayList;
import java.util.List;

import myUtils.Constantes;
import myUtils.EstadoCelebrante;
import myUtils.EstadoCerimonia;
import myUtils.IModelo;
import play.db.DB;
import play.db.jpa.Model;

public class MCelebrante extends Model implements IModelo {

	private int codCelebrante;
	private String nome;
	private String endereco;
	private String fone1;
	private String fone2;
	private String email;
	private String nick;
	private EstadoCelebrante estado;
	private int codBairro;
	private String bairro;
	
	
	public int getCodCelebrante()
	{
		return this.codCelebrante;
	}
	public void setNome(String aNome)
	{
		this.nome = aNome;
	}
	public String getNome()
	{
		return this.nome;
	}
	public void setEndereco(String aEndereco)
	{
		this.endereco = aEndereco;
	}
	public String getEndereco()
	{
		return this.endereco;
	}
	public void setFone1(String aFone1)
	{
		this.fone1 = aFone1;
	}
	public String getFone1()
	{
		return this.fone1;
	}
	public void setFone2(String aFone2)
	{
		this.fone2 = aFone2;
	}
	public String getFone2()
	{
		return this.fone2;
	}
	public void setEmail(String aEmail)
	{
		this.email = aEmail;
	}
	public String getEmail()
	{
		return this.email;
	}
	public void setNick(String aNick)
	{
		this.nick = aNick;
	}
	public String getNick()
	{
		return this.nick;
	}
	public void setEstado(EstadoCelebrante aEstado)
	{
		this.estado = aEstado;
	}
	public EstadoCelebrante getEstado()
	{
		return this.estado;
	}
	public void setCodBairro(int aCodBairro)
	{
		this.codBairro = aCodBairro;
	}
	public int getCodBairro()
	{
		return this.codBairro;
	}
	public String getBairro()
	{
		try
		{
			MBairro aa = new MBairro(this.codBairro);
			this.bairro = aa.getNome();
		}
		catch(Exception e)
		{
			
		}
		return this.bairro;
	}
	
	
	public MCelebrante(String aNome, String aEndereco, String aFone1, String aFone2,
			String aEmail, String aNick, int aCodBairro)
	{
		this.nome = aNome;
		this.endereco = aEndereco;
		this.fone1 = aFone1;
		this.fone2 = aFone2;
		this.email = aEmail;
		this.nick = aNick;
		this.codBairro = aCodBairro;
		this.estado = EstadoCelebrante.Ativo;
	}
	
	public MCelebrante(int aCodCelebrante) throws Exception
	{
		ResultSet rs;
		
		String strQuery = "Select * From Celebrante Where Celebrante.CodCelebrante = " + aCodCelebrante;	
		
		try
		{
			rs = DB.executeQuery(strQuery);
			
			
			if(rs == null)
				throw new Exception("Celebrante não cadastrado!");
			
			while (rs.next())
			{
				this.codCelebrante	= rs.getInt("codCelebrante");
				this.nome = rs.getString("nome");
				this.endereco = rs.getString("endereco");
				this.fone1 = rs.getString("fone1");
				this.fone2 = rs.getString("fone2");
				this.email = rs.getString("email");
				this.nick = rs.getString("nick");
				this.codBairro = rs.getInt("codBairro");
				switch(rs.getInt("ativo"))
				{
					case Constantes.cltvAtivo: this.estado = EstadoCelebrante.Ativo;break;
					case Constantes.cltInativo: this.estado = EstadoCelebrante.Inativo;break;
					case Constantes.cltTransferido: this.estado = EstadoCelebrante.Transferido;break;
				}
			}
		}
		catch(Exception e)
		{
			throw new Exception(e.getMessage());
		}
	}
	
	public static List<MCelebrante> select(int aCodCelebrante, String aNome, int aCodBairro) throws Exception
	{
		ResultSet rs;
		int codCelebrante;
		
		List<MCelebrante> retorno  = new ArrayList<MCelebrante>();
		String strQuery = "Select * From Celebrante Where Celebrante.CodCelebrante > 0" ;

		if(aCodCelebrante > 0)
		{
			strQuery += " and Celebrante.CodCelebrante = " + aCodCelebrante;
		}
		
		if(!aNome.equals(""))
		{
			strQuery += " and Celebrante.nome like  '" + aNome + "%'";
		}
		
		if(aCodBairro>0)
		{
			strQuery += " and Celebrante.codBairro = " + aCodBairro; 
		}
		
		try
		{
			rs = DB.executeQuery(strQuery);	
			
			while (rs.next())
			{
				codCelebrante 	= rs.getInt("CodCelebrante");
				
				MCelebrante celebrante = new MCelebrante(codCelebrante);
				retorno.add(celebrante);
				
			}	
			
		}
		catch(Exception e)
		{
			throw new Exception(e.getMessage() + "\n Comando: " + strQuery);
		}
		
		return retorno;
	}
	
	@Override
	public void update() throws Exception {
		if(this.codCelebrante == 0)
		{
			this.insert();
		}
		else
		{
			ResultSet rs;
			
			//atualiza objeto
			String strQuery2 = "Select * From Celebrante Where Celebrante.codCelebrante = " + this.codCelebrante;
			
			String strQuery = "Update Celebrante set Nome = '" + this.nome + "'";
			strQuery +=	",endereco = '" + this.endereco;
			strQuery += "',fone1 = '"  + this.fone1;
			strQuery += "',fone2 = '"  + this.fone2;
			strQuery += "',email = '"+ this.email;
			strQuery += "',nick = '"+ this.nick;
			strQuery += "',codBairro = " + this.codBairro;
			switch(this.estado)
			{
				case Ativo: strQuery += ", Ativo = " + Constantes.cltvAtivo ;break;
				case Inativo: strQuery += ", Ativo = " + Constantes.cltInativo ;break;
				case Transferido: strQuery += ", Ativo = " + Constantes.cltTransferido ;break;
			}
			
			
			strQuery += " Where Celebrante.codCelebrante = " + this.codCelebrante;
			
			
			try
			{
				DB.execute(strQuery);
				rs = DB.executeQuery(strQuery2);
				
				while (rs.next())
				{
					this.codCelebrante	= rs.getInt("codCelebrante");
					this.nome = rs.getString("nome");
					this.endereco = rs.getString("endereco");
					this.fone1 = rs.getString("fone1");
					this.fone2 = rs.getString("fone2");
					this.email = rs.getString("email");
					this.nick = rs.getString("nick");
					this.codBairro = rs.getInt("codBairro");
					switch(rs.getInt("ativo"))
					{
						case Constantes.cltvAtivo: this.estado = EstadoCelebrante.Ativo;break;
						case Constantes.cltInativo: this.estado = EstadoCelebrante.Inativo;break;
						case Constantes.cltTransferido: this.estado = EstadoCelebrante.Transferido;break;
					}
				}			
				
			}
			catch(Exception e)
			{
				throw new Exception(e.getMessage());
			}
		}
	}
	@Override
	public void excluir() throws Exception {
		if(this.codCelebrante != 0)
		{
			String strQuery = "Delete From Celebrante Where Celebrante.CodCelebrante = " + this.codCelebrante;
			
			try
			{
				DB.execute(strQuery);	
				this.codCelebrante = 0;
			}
			catch(Exception e)
			{
				throw new Exception(e.getMessage() + "\n Comando: " + strQuery);
			}
		}
	}
	@Override
	public void insert() throws Exception {
		String strQuery = "Insert Into Celebrante(nome,endereco,fone1,fone2,nick,codBairro,ativo) Values(";
		strQuery += "'"   + this.nome;
		strQuery +=	"','" + this.endereco;
		strQuery += "','" + this.fone1;
		strQuery += "','" + this.fone2;
		strQuery += "','" + this.nick;
		strQuery += "',"  + this.codBairro;
		switch(this.estado)
		{
			case Ativo: strQuery += "," + Constantes.cltvAtivo +")";break;
			case Inativo: strQuery += "," + Constantes.cltInativo +")";break;
			case Transferido: strQuery += "," + Constantes.cltTransferido +")";break;
		}
		
		try
		{
			DB.execute(strQuery);
		}
		catch(Exception e)
		{
			throw new Exception(e.getMessage() + "\n Comando: " + strQuery);
		}
	}
}
